home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / fft32010.arc / PROGRAM.8 < prev    next >
Encoding:
Text File  |  1984-11-13  |  13.2 KB  |  827 lines

  1.       IDT 'PFA'
  2. *
  3. *   Prime-Factor FFT Program
  4. *
  5. *    Complex input data.
  6. *    Table lookup of coefficients.
  7. *    No scaling is done on intermediate values in the program.
  8. *    External data RAM is addressed via peripheral I/O instructions.
  9. *        An address counter is required and is loaded by a write
  10. *        to port 0.  Data is read from and written to port 1.
  11. *        Final results are output in unscrambled order to port 2.
  12. *    Data in the external RAM assumes complex data with corresponding
  13. *        real and imaginary data values in consecutive locations.
  14. *
  15. * N is the size of the transform (N = NI1*NI2*...NIm).
  16. N    EQU 63
  17. NI1    EQU 7
  18. NI2    EQU 9
  19. *
  20. * Data Memory Allocation.
  21. *
  22. X1    EQU 0        *** Current data points
  23. Y1    EQU 1        *
  24. X2    EQU 2        *
  25. Y2    EQU 3        *
  26. X3    EQU 4        *
  27. Y3    EQU 5        *
  28. X4    EQU 6        *
  29. Y4    EQU 7        *
  30. X5    EQU 8        *
  31. Y5    EQU 9        *
  32. X6    EQU 10        *
  33. Y6    EQU 11        *
  34. X7    EQU 12        *
  35. Y7    EQU 13        *
  36. X8    EQU 14        *
  37. Y8    EQU 15        *
  38. X9    EQU 16        *
  39. Y9    EQU 17        ***
  40. I1    EQU 18        *** External data addresses
  41. I2    EQU 19        *
  42. I3    EQU 20        *
  43. I4    EQU 21        *
  44. I5    EQU 22        *
  45. I6    EQU 23        *
  46. I7    EQU 24        *
  47. I8    EQU 25        *
  48. I9    EQU 26        ***
  49. R1    EQU 27        *** Temporary locations
  50. R2    EQU 28        *
  51. R3    EQU 29        *
  52. R4    EQU 30        *
  53. R5    EQU 31        *
  54. R6    EQU 32        *
  55. R7    EQU 33        *
  56. R8    EQU 34        *
  57. R9    EQU 35        *
  58. R10    EQU 36        *
  59. S1    EQU 37        *
  60. S2    EQU 38        *
  61. S3    EQU 39        *
  62. S4    EQU 40        *
  63. S5    EQU 41        *
  64. S6    EQU 42        *
  65. S7    EQU 43        *
  66. S8    EQU 44        *
  67. S9    EQU 45        *
  68. S10    EQU 46        *
  69. T    EQU 47        *
  70. T1    EQU 48        *
  71. T2    EQU 49        *
  72. T3    EQU 50        *
  73. T4    EQU 51        *
  74. U    EQU 52        *
  75. U1    EQU 53        *
  76. U2    EQU 54        *
  77. U3    EQU 55        *
  78. U4    EQU 56        ***
  79. C72    EQU 57        *** Locations of coefficients
  80. C73    EQU 58        *
  81. C74    EQU 59        *
  82. C71    EQU 60        *
  83. C75    EQU 61        *
  84. C76    EQU 62        *
  85. C77    EQU 63        *
  86. C78    EQU 64        *
  87. C31    EQU 65        *
  88. C32    EQU 66        *
  89. C94    EQU 67        *
  90. C92    EQU 68        *
  91. C93    EQU 69        *
  92. C98    EQU 70        *
  93. C96    EQU 71        *
  94. C97    EQU 72        ***
  95. ONE    EQU 73        * Contains value 1
  96. N1A    EQU 74        * N1 for the first module
  97. N2A    EQU 75        * N2 for the first module
  98. N1B    EQU 76        * N1 for the second module
  99. N2B    EQU 77        * N2 for the second module
  100. J    EQU 78        *
  101. HOLDN    EQU 79        * Contains value N
  102. UNSC    EQU 80        * Location of unscrambling constant
  103. *
  104. * Start of program memory section.
  105. *
  106.     AORG 0
  107. START    LDPK 0
  108.     LACK 1
  109.     SACL ONE        * ONE = 1
  110.     MPYK N
  111.     PAC
  112.     SACL HOLDN        * HOLDN = N
  113.     MPYK CTABLE
  114.     PAC            * ACC has address of coefficient table
  115.     LARK AR0,C72
  116.     LARK AR1,15
  117. RDCOEF      LARP 0        * Read coefficients into data memory
  118.       TBLR *+,AR1
  119.       ADD  ONE
  120.       BANZ RDCOEF
  121.     LACK 16
  122.     SACL UNSC        * Unscrambling factor = 16 for N = 63
  123.     LACK NI1        * Initialize N1 and N2 for all modules
  124.     SACL N1A
  125.     SACL N2B
  126.     LACK NI2
  127.     SACL N2A
  128.     SACL N1B
  129.     ZAC
  130.     SACL J            * J = 0
  131. *
  132. * Module 1, WFTA = 7.
  133. *
  134. JLOOP1       LARK AR0,I1
  135.        LARP 0        * AR0 points to address locations
  136.        LAC    J,1
  137.        SACL *+        * I1 = J (data organized as real value followed
  138. *                * by imaginary so address I1 is 2 times J).
  139.        LARK AR1,NI1-2
  140. LLOOP1          LARP 0
  141.           ADD  N2A,1
  142.           SUB  HOLDN,1
  143.           BGEZ MOD1
  144.          ADD  HOLDN,1
  145. MOD1          SACL *+,0,AR1    * I(L) = (I + N2)mod N
  146.           BANZ LLOOP1    * Loop for L = 2 to N1
  147. *
  148.        CALL WFTA7        * Call WFTA module
  149.        LAC    J
  150.        ADD    N1A
  151.        SACL J        * J = J + N1
  152.        SUB    HOLDN
  153.        BLZ    JLOOP1        * Loop while J <= N
  154. *
  155. * Module 2, WFTA = 9.
  156. *
  157.     ZAC
  158.     SACL J            * J = 0
  159. JLOOP2       LARK AR0,I1        * AR0 points to address locations
  160.        LARP 0
  161.        LAC    J,1
  162.        SACL *+        * I1 = J
  163.        LARK AR1,NI2-2
  164. LLOOP2          LARP 0
  165.           ADD  N2B,1
  166.           SUB  HOLDN,1
  167.           BGEZ  MOD2
  168.          ADD  HOLDN,1
  169. MOD2          SACL *+,0,AR1    * I(L) = (I + N1)mod N
  170.           BANZ LLOOP2    * Loop for L = 2 to N1
  171. *
  172.       CALL WFTA9        * Call WFTA module
  173.       LAC  J
  174.       ADD  N1B
  175.       SACL J        * J = J + N1
  176.       SUB  HOLDN
  177.       BLZ  JLOOP2        * Loop while J <= N
  178. *
  179. * Unscrambler.
  180. *
  181.     LARK AR0,62
  182.     LARP 0
  183.     ZAC
  184.     SACL J
  185. UNSCRA       OUT    J,PA0        * Read in data from address J
  186.        IN    X1,PA1
  187.        IN    Y1,PA1
  188.        OUT    X1,PA2        * Output unscrambled data to port 2
  189.        OUT    Y1,PA2
  190.        LAC    J
  191.        ADD    UNSC,1
  192.        SUB    HOLDN,1
  193.        BGEZ UNS1
  194.           ADD HOLDN,1
  195. UNS1       SACL J        * J = (J + UNSC)mod N
  196.        BANZ UNSCRA        * Loop over all data points
  197. *
  198. * PFA complete.
  199. *
  200. STOP B STOP
  201. *********************************************************************
  202. *
  203. * WFTA modules.
  204. *
  205. *********************************************************************
  206. *
  207. * Length-7 module.
  208. *
  209. WFTA7    OUT  I1,PA0        * Input 7 data points
  210.     IN   X1,PA1
  211.     IN   Y1,PA1
  212.     OUT  I2,PA0
  213.     IN   X2,PA1
  214.     IN   Y2,PA1
  215.     OUT  I3,PA0
  216.     IN   X3,PA1
  217.     IN   Y3,PA1
  218.     OUT  I4,PA0
  219.     IN   X4,PA1
  220.     IN   Y4,PA1
  221.     OUT  I5,PA0
  222.     IN   X5,PA1
  223.     IN   Y5,PA1
  224.     OUT  I6,PA0
  225.     IN   X6,PA1
  226.     IN   Y6,PA1
  227.     OUT  I7,PA0
  228.     IN   X7,PA1
  229.     IN   Y7,PA1
  230. *
  231. * Main length-7 calculations.
  232. *
  233. PFA7    LAC X2
  234.     ADD X7
  235.     SACL R1     * R1 = X2 + X7
  236.     SUB X7,1
  237.     SACL R2     * R2 = X2 - X7
  238.     LAC Y2
  239.     ADD Y7
  240.     SACL S1     * S1 = Y2 + Y7
  241.     SUB Y7,1
  242.     SACL S2     * S2 = Y2 - Y7
  243.     LAC X3
  244.     ADD X6
  245.     SACL R3     * R3 = X3 + X6
  246.     SUB X6,1
  247.     SACL R4     * R4 = X3 - X6
  248.     LAC Y3
  249.     ADD Y6
  250.     SACL S3     * S3 = Y3 + Y6
  251.     SUB Y6,1
  252.     SACL S4     * S4 = Y3 - Y6
  253.     LAC X4
  254.     ADD X5
  255.     SACL R5     * R5 = X4 + X5
  256.     SUB X5,1
  257.     SACL R6     * R6 = X4 - X5
  258.     LAC Y4
  259.     ADD Y5
  260.     SACL S5     * S5 = Y4 + Y5
  261.     SUB Y5,1
  262.     SACL S6     * S6 = Y4 - Y5
  263.     LAC R1
  264.     ADD R3
  265.     ADD R5
  266.     SACL T1     * T1 = R1 + R3 + R5
  267.     LAC S1
  268.     ADD S3
  269.     ADD S5
  270.     SACL U1     * U1 = S1 + S3 + S5
  271.     LAC X1
  272.     ADD T1
  273.     SACL X1     * X1 = X1 + T1
  274.     LAC Y1
  275.     ADD U1
  276.     SACL Y1     * Y1 = Y1 + U1
  277. *
  278.     LT C71        * (+ -1.0)
  279.     MPY T1
  280.     PAC
  281.     ADD X1,15
  282.     SUB T1,15
  283.     SACH T1,1    * T1 = X1 + C71 * T1
  284.     MPY U1
  285.     PAC
  286.     ADD Y1,15
  287.     SUB U1,15
  288.     SACH U1,1    * U1 = Y1 + C71 * U1
  289.     LT C72
  290.     MPY R1
  291.     PAC
  292.     MPY R5
  293.     SPAC
  294.     SACH T2,1    * T2 = C72 * (R1 - R5)
  295.     MPY S1
  296.     PAC
  297.     MPY S5
  298.     SPAC
  299.     SACH U2,1    * U2 = C72 * (S1 - S5)
  300.     LT C73
  301.     MPY R5
  302.     PAC
  303.     MPY R3
  304.     SPAC
  305.     SACH T3,1    * T3 = C73 * (R5 - R3)
  306.     MPY S5
  307.     PAC
  308.     MPY S3
  309.     SPAC
  310.     SACH U3,1    * U3 = C73 * (S5 - S3)
  311.     LT C74
  312.     MPY R3
  313.     PAC
  314.     MPY R1
  315.     SPAC
  316.     SACH T4,1    * T4 = C74 * (R3 - R1)
  317.     MPY S3
  318.     PAC
  319.     MPY S1
  320.     SPAC
  321.     SACH U4,1    * U4 = C74 * (S3 - S1)
  322.     LAC T1
  323.     ADD T2
  324.     ADD T3
  325.     SACL R1     * R1 = T1 + T2 + T3
  326.     LAC T1
  327.     SUB T2
  328.     SUB T4
  329.     SACL R3     * R3 = T1 - T2 - T4
  330.     LAC T1
  331.     SUB T3
  332.     ADD T4
  333.     SACL R5     * R5 = T1 - T3 + T4
  334.     LAC U1
  335.     ADD U2
  336.     ADD U3
  337.     SACL S1     * S1 = U1 + U2 + U3
  338.     LAC U1
  339.     SUB U2
  340.     SUB U4
  341.     SACL S3     * S3 = U1 - U2 - U4
  342.     LAC U1
  343.     SUB U3
  344.     ADD U4
  345.     SACL S5     * S5 = U1 - U3 + U4
  346.     LT C75
  347.     MPY S2
  348.     PAC
  349.     MPY S4
  350.     APAC
  351.     MPY S6
  352.     SPAC
  353.     SACH U1,1    * U1 = C75 * (S2 + S4 - S6)
  354.     MPY R2
  355.     PAC
  356.     MPY R4
  357.     APAC
  358.     MPY R6
  359.     SPAC
  360.     SACH T1,1    * T1 = C75 * (R2 + R4 - R6)
  361.     LT C76
  362.     MPY R2
  363.     PAC
  364.     MPY R6
  365.     APAC
  366.     SACH T2,1    * T2 = C76 * (R2 + R6)
  367.     MPY S2
  368.     PAC
  369.     MPY S6
  370.     APAC        * U2 = C76 * (S2 + S6)
  371.     SACH U2,1
  372.     LT C77
  373.     MPY R4
  374.     PAC
  375.     MPY R6
  376.     APAC
  377.     SACH T3,1    * T3 = C77 * (R4 + R6)
  378.     MPY S4
  379.     PAC
  380.     MPY S6
  381.     APAC
  382.     SACH U3,1    * U3 = C77 * (S4 + S6)
  383.     LT C78
  384.     MPY R4
  385.     PAC
  386.     MPY R2
  387.     SPAC
  388.     SACH T4,1    * T4 = C78 * (R4 - R2)
  389.     MPY S4
  390.     PAC
  391.     MPY S2
  392.     SPAC
  393.     SACH U4,1    * U4 = C78 * (S4 - S2)
  394. *
  395.     LAC T1
  396.     ADD T2
  397.     ADD T3
  398.     SACL R2     * R2 = T1 + T2 + T3
  399.     LAC T1
  400.     SUB T2
  401.     SUB T4
  402.     SACL R4     * R4 = T1 - T2 - T4
  403.     LAC T1
  404.     SUB T3
  405.     ADD T4
  406.     SACL R6     * R6 = T1 - T3 + T4
  407.     LAC U1
  408.     ADD U2
  409.     ADD U3
  410.     SACL S2     * S2 = U1 + U2 + U3
  411.     LAC U1
  412.     SUB U2
  413.     SUB U4
  414.     SACL S4     * S4 = U1 - U2 - U4
  415.     LAC U1
  416.     SUB U3
  417.     ADD U4
  418.     SACL S6     * S6 = U1 - U3 + U4
  419.     LAC R1
  420.     ADD S2
  421.     SACL X2     * X2 = R1 + S2
  422.     SUB S2,1
  423.     SACL X7     * X7 = R1 - S2
  424.     LAC S1
  425.     ADD R2
  426.     SACL Y7     * Y7 = S1 + R2
  427.     SUB R2,1
  428.     SACL Y2     * Y2 = S1 - R2
  429.     LAC R3
  430.     ADD S4
  431.     SACL X3     * X3 = R3 + S4
  432.     SUB S4,1
  433.     SACL X6     * X6 = R3 - S4
  434.     LAC S3
  435.     ADD R4
  436.     SACL Y6     * Y6 = S3 + R4
  437.     SUB R4,1
  438.     SACL Y3     * Y3 = S3 - R4
  439.     LAC R5
  440.     ADD S6
  441.     SACL X5     * X5 = R5 + S6
  442.     SUB S6,1
  443.     SACL X4     * X4 = R5 - S6
  444.     LAC S5
  445.     ADD R6
  446.     SACL Y4     * Y4 = S5 + R6
  447.     SUB R6,1
  448.     SACL Y5     * Y5 = S5 - R6
  449. *
  450. * Output resulting data values.
  451. *
  452.     OUT  I1,PA0
  453.     OUT  X1,PA1
  454.     OUT  Y1,PA1
  455.     OUT  I2,PA0
  456.     OUT  X2,PA1
  457.     OUT  Y2,PA1
  458.     OUT  I3,PA0
  459.     OUT  X3,PA1
  460.     OUT  Y3,PA1
  461.     OUT  I4,PA0
  462.     OUT  X4,PA1
  463.     OUT  Y4,PA1
  464.     OUT  I5,PA0
  465.     OUT  X5,PA1
  466.     OUT  Y5,PA1
  467.     OUT  I6,PA0
  468.     OUT  X6,PA1
  469.     OUT  Y6,PA1
  470.     OUT  I7,PA0
  471.     OUT  X7,PA1
  472.     OUT  Y7,PA1
  473. *
  474.     RET            * End of WFTA7
  475. *
  476. * Length-9 module.
  477. *
  478. WFTA9    OUT  I1,PA0        * Input 9 data values
  479.     IN   X1,PA1
  480.     IN   Y1,PA1
  481.     OUT  I2,PA0
  482.     IN   X2,PA1
  483.     IN   Y2,PA1
  484.     OUT  I3,PA0
  485.     IN   X3,PA1
  486.     IN   Y3,PA1
  487.     OUT  I4,PA0
  488.     IN   X4,PA1
  489.     IN   Y4,PA1
  490.     OUT  I5,PA0
  491.     IN   X5,PA1
  492.     IN   Y5,PA1
  493.     OUT  I6,PA0
  494.     IN   X6,PA1
  495.     IN   Y6,PA1
  496.     OUT  I7,PA0
  497.     IN   X7,PA1
  498.     IN   Y7,PA1
  499.     OUT  I8,PA0
  500.     IN   X8,PA1
  501.     IN   Y8,PA1
  502.     OUT  I9,PA0
  503.     IN   X9,PA1
  504.     IN   Y9,PA1
  505. *
  506. * Main length-9 calculations.
  507. *
  508. PFA9    LAC X2
  509.     ADD X9
  510.     SACL R1     * R1 = X2 + X9
  511.     SUB X9,1
  512.     SACL R2     * R2 = X2 - X9
  513.     LAC Y2
  514.     ADD Y9
  515.     SACL S1     * S1 = Y2 + Y9
  516.     SUB Y9,1
  517.     SACL S2     * S2 = Y2 - Y9
  518.     LAC X3
  519.     ADD X8
  520.     SACL R3     * R3 = X3 + X8
  521.     SUB X8,1
  522.     SACL R4     * R4 = X3 - X8
  523.     LAC Y3
  524.     SUB Y8
  525.     SACL S4     * S4 = Y3 - Y8
  526.     ADD Y8,1
  527.     SACL S3     * S3 = Y3 + Y8
  528.     LAC X4
  529.     ADD X7
  530.     SACL R5     * R5 = X4 + X7
  531. *
  532.     LT C31
  533.     MPY X7
  534.     PAC
  535.     MPY X4
  536.     SPAC
  537.     SACH T,1    * T = -(X4 - X7) * C31
  538.     LAC Y4
  539.     ADD Y7
  540.     SACL S5     * S5 = Y4 + Y7
  541.     MPY Y7
  542.     PAC
  543.     MPY Y4
  544.     SPAC
  545.     SACH U,1    * U = -(Y4 - Y7) * C31
  546. *
  547.     LAC X5
  548.     ADD X6
  549.     SACL R7     * R7 = X5 + X6
  550.     SUB X6,1
  551.     SACL R8     * R8 = X5 - X6
  552.     LAC Y5
  553.     ADD Y6
  554.     SACL S7     * S7 = Y5 + Y6
  555.     SUB Y6,1
  556.     SACL S8     * S8 = Y5 - Y6
  557.     LAC X1,15
  558.     ADD R5,15
  559.     SACH R9,1    * R9 = X1 + R5
  560.     SUB R5,15
  561.     LT C32
  562.     MPY R5
  563.     SPAC
  564.     SACH T1,1    * T1 = X1 - R5 * C32
  565.     LAC Y1,15
  566.     ADD S5,15
  567.     SACH S9,1    * S9 = Y1 + S5
  568.     SUB S5,15
  569.     MPY S5
  570.     SPAC
  571.     SACH U1,1    * U1 = Y1 - S5 * C32
  572. *
  573.     LT C92
  574.     MPY R3
  575.     PAC
  576.     MPY R7
  577.     SPAC
  578.     SACH T2,1    * T2 = (R3 - R7) * C92
  579.     MPY S3
  580.     PAC
  581.     MPY S7
  582.     SPAC
  583.     SACH U2,1    * U2 = (S3 - S7) * C92
  584.     LT C93
  585.     MPY R1
  586.     PAC
  587.     MPY R7
  588.     SPAC
  589.     SACH T3,1    * T3 = (R1 - R7) * C93
  590.     MPY S1
  591.     PAC
  592.     MPY S7
  593.     SPAC
  594.     SACH U3,1    * U3 = (S1 - S7) * C93
  595.     LT C94
  596.     MPY R1
  597.     PAC
  598.     MPY R3
  599.     SPAC
  600.     SACH T4,1    * T4 = (R1 - R3) * C94
  601.     MPY S1
  602.     PAC
  603.     MPY S3
  604.     SPAC
  605.     SACH U4,1    * U4 = (S1 - S3) * C94
  606. *
  607.     LAC R1
  608.     ADD R3
  609.     ADD R7
  610.     SACL R10    * R10 = R1 + R3 + R7
  611.     LAC S1
  612.     ADD S3
  613.     ADD S7
  614.     SACL S10    * S10 = S1 + S3 + S7
  615.     LAC T1
  616.     ADD T2
  617.     ADD T4
  618.     SACL R1     * R1 = T1 + T2 + T4
  619.     LAC T1
  620.     SUB T2
  621.     SUB T3
  622.     SACL R3     * R3 = T1 - T2 - T3
  623.     LAC T1
  624.     ADD T3
  625.     SUB T4
  626.     SACL R7     * R7 = T1 + T3 - T4
  627.     LAC U1
  628.     ADD U2
  629.     ADD U4
  630.     SACL S1     * S1 = U1 + U2 + U4
  631.     LAC U1
  632.     SUB U2
  633.     SUB U3
  634.     SACL S3     * S3 = U1 - U2 - U3
  635.     LAC U1
  636.     ADD U3
  637.     SUB U4
  638.     SACL S7     * S7 = U1 + U3 - U4
  639.     LAC R9,15
  640.     ADD R10,15
  641.     SACH X1,1    * X1 = R9 + R10
  642.     SUB R10,15
  643.     LT C32
  644.     MPY R10
  645.     SPAC
  646.     SACH R5,1    * R5 = R9 - R10 * C32
  647.     LAC S9,15
  648.     ADD S10,15
  649.     SACH Y1,1    * Y1 = S9 + S10
  650.     SUB S10,15
  651.     MPY S10
  652.     SPAC
  653.     SACH S5,1    * S5 = S9 - S10 * C32
  654. *
  655.     LT C31        * C31 = 136
  656.     MPY R4
  657.     PAC
  658.     MPY R2
  659.     SPAC
  660.     MPY R8
  661.     SPAC
  662.     SACH R6,1    * R6 = -(R2 - R4 + R8) * C31
  663.     MPY S4
  664.     PAC
  665.     MPY S2
  666.     SPAC
  667.     MPY S8
  668.     SPAC
  669.     SACH S6,1    * S6 = -(S2 - S4 + S8) * C31
  670.     LT C96        * C96 = 142
  671.     MPY R4
  672.     PAC
  673.     MPY R8
  674.     APAC
  675.     SACH T2,1    * T2 = (R4 + R8) * C96
  676.     MPY S4
  677.     PAC
  678.     MPY S8
  679.     APAC
  680.     SACH U2,1    * U2 = (S4 + S8) * C96
  681.     LT C97
  682.     MPY R2
  683.     PAC
  684.     MPY R8
  685.     SPAC
  686.     SACH T3,1    * T3 = (R2 - R8) * C97
  687.     MPY S2
  688.     PAC
  689.     MPY S8
  690.     SPAC
  691.     SACH U3,1    * U3 = (S2 - S8) * C97
  692.     LT C98        * C98 = 141
  693.     MPY R2
  694.     PAC
  695.     MPY R4
  696.     APAC
  697.     SACH T4,1    * T4 = (R2 + R4) * C98
  698.     MPY S2
  699.     PAC
  700.     MPY S4
  701.     APAC
  702.     SACH U4,1    * U4 = (S2 + S4) * C98
  703. *
  704.     LAC T
  705.     ADD T2
  706.     ADD T4
  707.     SACL R2     * R2 = T + T2 + T4
  708.     LAC T
  709.     SUB T2
  710.     SUB T3
  711.     SACL R4     * R4 = T - T2 - T3
  712.     LAC T
  713.     ADD T3
  714.     SUB T4
  715.     SACL R8     * R8 = T + T3 - T4
  716.     LAC U
  717.     ADD U2
  718.     ADD U4
  719.     SACL S2     * S2 = U  + U2 + U4
  720.     LAC U
  721.     SUB U2
  722.     SUB U3
  723.     SACL S4     * S4 = U -  U2 - U3
  724.     LAC U
  725.     ADD U3
  726.     SUB U4
  727.     SACL S8     * S8 = U  + U3 - U4
  728.     LAC R1
  729.     ADD S2
  730.     SACL X9     * X9 = R1 + S2
  731.     SUB S2,1
  732.     SACL X2     * X2 = R1 - S2
  733.     LAC S1
  734.     ADD R2
  735.     SACL Y2     * Y2 = S1 + R2
  736.     SUB R2,1
  737.     SACL Y9     * Y9 = S1 - R2
  738.     LAC R3
  739.     ADD S4
  740.     SACL X3     * X3 = R3 + S4
  741.     SUB S4,1
  742.     SACL X8     * X8 = R3 - S4
  743.     LAC S3
  744.     ADD R4
  745.     SACL Y8     * Y8 = S3 + R4
  746.     SUB R4,1
  747.     SACL Y3     * Y3 = S3 - R4
  748.     LAC R5
  749.     ADD S6
  750.     SACL X7     * X7 = R5 + S6
  751.     SUB S6,1
  752.     SACL X4     * X4 = R5 - S6
  753.     LAC S5
  754.     ADD R6
  755.     SACL Y4     * Y4 = S5 + R6
  756.     SUB R6,1
  757.     SACL Y7     * Y7 = S5 - R6
  758.     LAC R7
  759.     ADD S8
  760.     SACL X6     * X6 = R7 + S8
  761.     SUB S8,1
  762.     SACL X5     * X5 = R7 - S8
  763.     LAC S7
  764.     ADD R8
  765.     SACL Y5     * Y5 = S7 + R8
  766.     SUB R8,1
  767.     SACL Y6     * Y6 = S7 - R8
  768. *
  769. * Output resulting data values.
  770. *
  771.     OUT  I1,PA0
  772.     OUT  X1,PA1
  773.     OUT  Y1,PA1
  774.     OUT  I2,PA0
  775.     OUT  X2,PA1
  776.     OUT  Y2,PA1
  777.     OUT  I3,PA0
  778.     OUT  X3,PA1
  779.     OUT  Y3,PA1
  780.     OUT  I4,PA0
  781.     OUT  X4,PA1
  782.     OUT  Y4,PA1
  783.     OUT  I5,PA0
  784.     OUT  X5,PA1
  785.     OUT  Y5,PA1
  786.     OUT  I6,PA0
  787.     OUT  X6,PA1
  788.     OUT  Y6,PA1
  789.     OUT  I7,PA0
  790.     OUT  X7,PA1
  791.     OUT  Y7,PA1
  792.     OUT  I8,PA0
  793.     OUT  X8,PA1
  794.     OUT  Y8,PA1
  795.     OUT  I9,PA0
  796.     OUT  X9,PA1
  797.     OUT  Y9,PA1
  798. *
  799.     RET        * End of length-9 module
  800. *
  801. ********************************************************
  802. *
  803. * Coefficient table.
  804. *
  805. ********************************************************
  806. CTABLE EQU $
  807. CFC72    DATA >6523    * C72 = 0.79015647
  808. CFC73    DATA >0726    * C73 = 0.055854267
  809. CFC74    DATA >5DFD    * C74 = 0.7343022
  810. CFC71    DATA >EAAA    * C71 = -0.1666667 (+ -1.0 IN THE PROGRAM)
  811. CFC75    DATA >3871    * C75 = 0.44095855
  812. CFC76    DATA >2BA1    * C76 = 0.34087293
  813. CFC77    DATA >4459    * C77 = 0.53396936
  814. CFC78    DATA >6FFA    * C78 = 0.87484229
  815. *
  816. CFC31    DATA >6ED9    * C31 = 0.86602540
  817. CFC32    DATA >4000    * C32 = 0.50000000
  818. *
  819. CFC94    DATA >620D    * C94 = 0.76604444
  820. CFC92    DATA >7847    * C92 = 0.93969262
  821. CFC93    DATA >E9C5    * C93 = -0.17364818
  822. CFC98    DATA >ADB9    * C98 = -0.64278761
  823. CFC96    DATA >D438    * C96 = -0.34202014
  824. CFC97    DATA >81F1    * C97 = -0.98480775
  825. *
  826.     END
  827.